package com.cg.leetcode;

import org.junit.Test;

import java.util.Stack;

/**
 * 371.两整数之和
 *
 * @program: LeetCode->LeetCode_371
 * @description: 371.两整数之和
 * @author: cg
 * @create: 2021-09-26 11:41
 **/
public class LeetCode_371 {

    @Test
    public void test371() {
        System.out.println(getSum(10, 8));
    }

    /**
     * 给你两个整数 a 和 b ，不使用 运算符 + 和 - ，计算并返回两整数之和。
     * <p>
     * 示例 1：
     * 输入：a = 1, b = 2
     * 输出：3
     * <p>
     * 示例 2：
     * 输入：a = 2, b = 3
     * 输出：5
     * <p>
     * 提示：
     * -1000 <= a, b <= 1000
     *
     * @param a
     * @param b
     * @return
     */
    public int getSum(int a, int b) {
        while (b != 0) {
            int c = (a & b) << 1;
            a = a ^ b;
            b = c;
        }
        return a;
    }

    /*public int getSum(int a, int b) {
        int ans = 0;
        for (int i = 0, t = 0; i < 32; i++) {
            int u1 = (a >> i) & 1, u2 = (b >> i) & 1;
            if (u1 == 1 && u2 == 1) {
                ans |= (t << i);
                t = 1;
            } else if (u1 == 1 || u2 == 1) {
                ans |= ((1 ^ t) << i);
            } else {
                ans |= (t << i);
                t = 0;
            }
        }
        return ans;
    }*/

}
